#ifndef THEADPOOL_H_
#define THEADPOOL_H_

#include"taskQueue.h"
#include"tidArr.h"
#include"user.h"
#include<pthread.h>
#include<sys/epoll.h>
#include<sys/socket.h>
#include<arpa/inet.h>

#define MAX_USER_NUM 10

typedef struct threadpool_s {
	_taskQueue_t _taskQueue;
	_tidArr_t _tidArr;
	pthread_mutex_t _mLock;
	pthread_cond_t _mCond;
	int epfd;
	int _exitFlag; //退出标识，0未退出，1退出

	user_context _user[MAX_USER_NUM];
} ThreadPool;

// 线程池初始化
// 傅瀚民
// 用于初始化线程池，生成工人线程

int threadPool_init(ThreadPool *threadpool, int worknum);
void _user_init(ThreadPool *threadpool,int netfd);
int _startWorker(ThreadPool *threadpool);
void *_threadFunc(void * arg);

// TCP初始化
// 傅瀚民
// 返回值：初始化完毕的SOCKFD
// 用于将IP和端口绑定到SOCKFD，并LISTEN
int tcp_init(const char *ip, const char *port);

int setNonBlocking(int fd);

int epollAdd(int epfd, int fd);
int epollDel(int epfd, int fd);

void doTask(task_t *ptask, ThreadPool *threadpool);

//任务接口
void cmdCd(task_t *ptask, ThreadPool *threadpool);
void cmdLs(task_t *ptask, ThreadPool *threadpool);
void cmdPwd(task_t *ptask, ThreadPool *threadpool);

void cmdMkdir(task_t *ptask, ThreadPool *threadpool);
void cmdRmdir(task_t *ptask, ThreadPool *threadpool);

void cmdPuts(ThreadPool *threadpool, task_t *ptask);
void cmdGets(ThreadPool *threadpool, task_t *ptask);
void cmdRemove(task_t *ptask, ThreadPool *threadpool);

void putsFile();
void getFile();
/* 
 * 袁天齐
 * 创建文件夹
 * 值为-1，即已有目标文件夹，则返回报错
 * 值为-2，即目标文件夹位置存在内容，但并非目录
 * 值为0，则正常创建文件夹
 */
int makeDir(const char *path);
/*
 * 袁天齐
 * 删除文件夹
 * 值为-1，目标路径不存子在
 * 值为-2，目标并非文件夹
 * 值为-3，未成功删除文件夹
 * 值为0，则正常删除
 */

int removeDir(const char *path);

#endif
